package ar.edu.utn.frba.gdaia.src.junittest;


import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import junit.framework.TestCase;
import ar.edu.utn.frba.gdaia.src.action.Command;
import ar.edu.utn.frba.gdaia.src.action.ReadDrawingsCommand;
import ar.edu.utn.frba.gdaia.src.action.ReadWordsCommand;
import ar.edu.utn.frba.gdaia.src.domain.Canal;
import ar.edu.utn.frba.gdaia.src.domain.ConceptoElemental;
import ar.edu.utn.frba.gdaia.src.domain.ParametrosVisuales;
import ar.edu.utn.frba.gdaia.src.domain.RepresentacionVisual;
import ar.edu.utn.frba.gdaia.src.externalinterface.ConcreteGUIInterface;
import ar.edu.utn.frba.gdaia.src.externalinterface.Mensaje;
import ar.edu.utn.frba.gdaia.src.main.Cerebro;
import ar.edu.utn.frba.gdaia.src.main.GDAIA;
import ar.edu.utn.frba.gdaia.src.util.ListBuilder;

/**
 * @author Juan Pablo
 */
public class ReadDrawingsCommandTest extends TestCase {

	public static void main(String[] args) {
		junit.swingui.TestRunner.run(ReadDrawingsCommandTest.class);
	}

	Cerebro cerebro = null;

	GDAIA gdaia = new GDAIA();

	Map parameters = null;

	/*
	 * @see TestCase#setUp()
	 */
	protected void setUp() throws Exception {
		super.setUp();
	}

	/*
	 * @see TestCase#tearDown()
	 */
	protected void tearDown() throws Exception {
		super.tearDown();
		gdaia.generateXMLForCerebro(cerebro);
	}

	/**
	 * Constructor for ReadWordsCommandTest.
	 * 
	 * @param arg0
	 */
	public ReadDrawingsCommandTest(String arg0) {
		super(arg0);
		// genero el cerebro a partir del XML
		cerebro = gdaia.generateCerebroFromXML();
	}

	public final void testExecute() {
		parameters = new HashMap();
		parameters.put(Command.CEREBRO, cerebro);

		final ConcreteGUIInterface guiInterface = new ConcreteGUIInterface();

		final RepresentacionVisual circulo = new RepresentacionVisual();
		{
		Map<ParametrosVisuales, BigDecimal> subconceptos = new HashMap<ParametrosVisuales, BigDecimal>();
			subconceptos.put(ParametrosVisuales.AREA, new BigDecimal(10));
			subconceptos.put(ParametrosVisuales.BARICENTRO_X, new BigDecimal(15));
			subconceptos.put(ParametrosVisuales.BARICENTRO_Y, new BigDecimal(54));
			circulo.setAtributos(subconceptos);
		}
		final RepresentacionVisual cuadrado = new RepresentacionVisual();
		{
			Map<ParametrosVisuales, BigDecimal> subconceptos = new HashMap<ParametrosVisuales, BigDecimal>();
			subconceptos.put(ParametrosVisuales.AREA, new BigDecimal(11));
			subconceptos.put(ParametrosVisuales.BARICENTRO_X, new BigDecimal(16));
			subconceptos.put(ParametrosVisuales.BARICENTRO_Y, new BigDecimal(55));
			cuadrado.setAtributos(subconceptos);
		}
		
		//A este no lo agrego
		final RepresentacionVisual triangulo = new RepresentacionVisual();
		{
			Map<ParametrosVisuales, BigDecimal> subconceptos = new HashMap<ParametrosVisuales, BigDecimal>();
			subconceptos.put(ParametrosVisuales.AREA, new BigDecimal(12));
			subconceptos.put(ParametrosVisuales.BARICENTRO_X, new BigDecimal(17));
			subconceptos.put(ParametrosVisuales.BARICENTRO_Y, new BigDecimal(56));
			cuadrado.setAtributos(subconceptos);
		}
		
		Thread t1 = new Thread(new Runnable() {
			public void run() {
				List<RepresentacionVisual> representacionesVisuales = new ArrayList<RepresentacionVisual>();
				representacionesVisuales.add(circulo);
				representacionesVisuales.add(cuadrado);
				
				guiInterface.putFromUIToMind(new Mensaje(representacionesVisuales, Canal.VISUAL));
			}
		});
		
		t1.start();
		
		parameters.put(Command.INTERFACE_EXTERNA, guiInterface);

		
		
		new ReadDrawingsCommand().execute(parameters);

		boolean ret = cerebro.getConceptos().contains(new ConceptoElemental(1, circulo, Canal.VISUAL)) &&
					  cerebro.getConceptos().contains(new ConceptoElemental(2, cuadrado, Canal.VISUAL));
		assertTrue(ret);
	}

}
